package algorithm.middle;

import java.util.HashMap;

/**
 * @BelongsProject: LeetCode
 * @BelongsPackage: algorithm.middle
 * @Author: 江岸
 * @CreateTime: 2021-06-03 22:11
 * @Description: 给你一个整数数组 nums 和一个整数 k ，编写一个函数来判断该数组是否含有同时满足下述条件的连续子数组：
 * <p>
 * 子数组大小 至少为 2 ，且
 * 子数组元素总和为 k 的倍数。
 * 如果存在，返回 true ；否则，返回 false 。
 * <p>
 * 如果存在一个整数 n ，令整数 x 符合 x = n * k ，则称 x 是 k 的一个倍数。
 * <p>
 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/continuous-subarray-sum
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
public class checkSubarraySum523 {
    public boolean checkSubarraySum(int[] nums, int k) {
        if (nums.length < 2) return false;
        HashMap<Integer, Integer> map = new HashMap<>();
        int count = 0;
        map.put(0, -1);
        for (int i = 0; i < nums.length; i++) {
            count = (count + nums[i]) % k;
            if (map.containsKey(count)) {
                if (i-map.get(count)>=2) return true;
            } else {
                map.put(count, i);
            }
        }

        return false;
    }
}
